From f664e3c9114f1b58b24421c459674778c4b6af57 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Wed, 15 Mar 2023 06:12:51 -0600 Subject: [PATCH] support millisecond track moves (#1036) * support millisecond track moves * add another position to track move option. --- reference/track/trackfilter-move-z.gpx | 22 ++++++++++++++++++++++ testo.d/track.test | 3 +++ trackfilter.cc | 17 ++++++++++------- xmldoc/filters/options/track-move.xml | 2 +- 4 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 reference/track/trackfilter-move-z.gpx diff --git a/reference/track/trackfilter-move-z.gpx b/reference/track/trackfilter-move-z.gpx new file mode 100644 index 000000000..3698b1f7b --- /dev/null +++ b/reference/track/trackfilter-move-z.gpx @@ -0,0 +1,22 @@ + + + + + + LOG-20020527 + + + 0.000 + + + + 0.000 + + + + 0.000 + + + + + diff --git a/testo.d/track.test b/testo.d/track.test index cc1de5874..adb9afbe1 100644 --- a/testo.d/track.test +++ b/testo.d/track.test @@ -54,6 +54,9 @@ compare ${REFERENCE}/track/trackfilter-move-d.gpx ${TMPDIR}/trackfilter-move-d.g gpsbabel -t -i gpx -f ${REFERENCE}/track/trackfilter.gpx -x track,move=-5m,name=LOG-20020527,start=20020527185742,stop=20020527185950,minimum_points=2 -o gpx -F ${TMPDIR}/trackfilter-move-m.gpx compare ${REFERENCE}/track/trackfilter-move-m.gpx ${TMPDIR}/trackfilter-move-m.gpx +gpsbabel -t -i gpx -f ${REFERENCE}/track/trackfilter.gpx -x track,move=5z,name=LOG-20020527,start=20020527190141.5,stop=20020527190449.5,minimum_points=2 -o gpx -F ${TMPDIR}/trackfilter-move-z.gpx +compare ${REFERENCE}/track/trackfilter-move-z.gpx ${TMPDIR}/trackfilter-move-z.gpx + # actually test a merge gpsbabel -t -i gpx -f ${REFERENCE}/track/trackfilter_merge.gpx -x track,merge -x track,speed -o gpx -F ${TMPDIR}/trackfilter_merge~gpx.gpx compare ${REFERENCE}/track/trackfilter_merge~gpx.gpx ${TMPDIR}/trackfilter_merge~gpx.gpx diff --git a/trackfilter.cc b/trackfilter.cc index f63b1359c..a690a6c79 100644 --- a/trackfilter.cc +++ b/trackfilter.cc @@ -75,7 +75,7 @@ qint64 TrackFilter::trackfilter_parse_time_opt(const char* arg) { qint64 result = 0; - static const QRegularExpression re(R"(^([+-]?\d+)([wdhms])(?:([+-]?\d+)([wdhms]))?(?:([+-]?\d+)([wdhms]))?(?:([+-]?\d+)([wdhms]))?(?:([+-]?\d+)([wdhms]))?$)", QRegularExpression::CaseInsensitiveOption); + static const QRegularExpression re(R"(^([+-]?\d+)([wdhmsz])(?:([+-]?\d+)([wdhmsz]))?(?:([+-]?\d+)([wdhmsz]))?(?:([+-]?\d+)([wdhmsz]))?(?:([+-]?\d+)([wdhmsz]))?(?:([+-]?\d+)([wdhmsz]))?$)", QRegularExpression::CaseInsensitiveOption); assert(re.isValid()); QRegularExpressionMatch match = re.match(arg); if (match.hasMatch()) { @@ -89,18 +89,21 @@ qint64 TrackFilter::trackfilter_parse_time_opt(const char* arg) switch (match.captured(idx+1).at(0).toLower().toLatin1()) { case 'w': - partial *= SECONDS_PER_DAY * 7; + partial *= SECONDS_PER_DAY * 1000 * 7; break; case 'd': - partial *= SECONDS_PER_DAY; + partial *= SECONDS_PER_DAY * 1000; break; case 'h': - partial *= SECONDS_PER_HOUR; + partial *= SECONDS_PER_HOUR * 1000; break; case 'm': - partial *= 60; + partial *= 60 * 1000; break; case 's': + partial *= 1000; + break; + case 'z': break; default: fatal(MYNAME "-time: invalid unit in move option \"%s\"!\n", qPrintable(match.captured(idx+1))); @@ -110,7 +113,7 @@ qint64 TrackFilter::trackfilter_parse_time_opt(const char* arg) } #ifdef TRACKF_DBG - qDebug() << MYNAME "-time option: shift =" << result << "seconds"; + qDebug() << MYNAME "-time option: shift =" << result / 1000.0 << "seconds"; #endif } else { fatal(MYNAME "-time: invalid value in move option \"%s\"!\n", arg); @@ -579,7 +582,7 @@ void TrackFilter::trackfilter_move() for (auto* track : qAsConst(track_list)) { foreach (Waypoint* wpt, track->waypoint_list) { if (wpt->creation_time.isValid()) { - wpt->creation_time = wpt->creation_time.addSecs(delta); + wpt->creation_time = wpt->creation_time.addMSecs(delta); } else { ++timeless_points; } diff --git a/xmldoc/filters/options/track-move.xml b/xmldoc/filters/options/track-move.xml index c7a09cb84..8ce1248ce 100644 --- a/xmldoc/filters/options/track-move.xml +++ b/xmldoc/filters/options/track-move.xml @@ -8,7 +8,7 @@ It can also be useful to correct tracks for week number roll over problems. The value of this option is a series of integer and unit pairs. Each integer may include a leading '+' or '-' sign. Positive integers shift the tracks later, while negative integers shift the tracks earlier. If no sign is provided the integer is assumed to be nonnegative. -Possible units are w for weeks, d for days, h for hours, m for minutes and s for seconds. +Possible units are w for weeks, d for days, h for hours, m for minutes, s for seconds and z for milliseconds. Time-shifting a track with the track filter -- 2.30.2